bitkeeper revision 1.1159.42.1 (412498cfQR0FW9Xp4EVER4lafeJgXQ)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Thu, 19 Aug 2004 12:10:55 +0000 (12:10 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Thu, 19 Aug 2004 12:10:55 +0000 (12:10 +0000)
Fix page allocator to properly free anonymous pages to the domain zone.

xen/common/page_alloc.c

index a57d43b9c3cccbe8f9d99e940c3d45aedff0eb1c..b3b056fd6898ea700737197cc01d101c6d7913a0 100644 (file)
@@ -422,7 +422,7 @@ void free_domheap_pages(struct pfn_info *pg, int order)
         drop_dom_ref = (d->xenheap_pages == 0);
         spin_unlock_recursive(&d->page_alloc_lock);
     }
-    else
+    else if ( likely(d != NULL) )
     {
         /* NB. May recursively lock from domain_relinquish_memory(). */
         spin_lock_recursive(&d->page_alloc_lock);
@@ -442,6 +442,12 @@ void free_domheap_pages(struct pfn_info *pg, int order)
 
         free_heap_pages(MEMZONE_DOM, pg, order);
     }
+    else
+    {
+        /* Freeing an anonymous domain-heap page. */
+        free_heap_pages(MEMZONE_DOM, pg, order);
+        drop_dom_ref = 0;
+    }
 
     if ( drop_dom_ref )
         put_domain(d);